//
//  NavigationController.swift
//  SwiftWB
//
//  Created by luozhijun on 2016/10/1.
//  Copyright © 2016年 luozhijun. All rights reserved.
//

import UIKit
import RTRootNavigationController

/**
 *  导航控制器的在storyboard中的RestorationID
 *  具体参看Main.storyboard
 */
enum NaviControllerSBRestorationID : String {
    case Home     = "Home"
    case Message  = "Message"
    case Discover = "Discover"
    case Profile  = "Profile"
}

/** 项目中所使用的NavigationController类 */
class NavigationController: RTRootNavigationController {
    
    override class func initialize() {
        // 在此处配置NavigationItem 和 NavigationBar的外观
        // UINavigationBar.appearance()
        // UIBarButtonItem.appearance()
    }
    
    // Think out 重写initWithCoder方法来加载Main.storyboard中子模块对应的storyboard,
    // 主要是为了适配iOS 8, 因为iOS 9才可以使用storyboard refrence;
    // 方法是在Main.storyboard的TabBarController(主控制器)中引用每个子模块的导航控制器,
    // 之后拦截导航控制器的initWithCoder方法, 用代码来加载导航控制器的子控制器,
    // 这些子控制器分别在不同的storyboard子模块中设定, 所以需要初始化这些storyboard,
    // 为了方便, 这里的方法是在Main.storyboard中子模块的导航控制器的restorationID填入其
    // 子控制所在的storyboard名称;
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        guard restorationIdentifier?.characters.count > 0 else {
            return
        }
        // 子控制器所在的storyboard名称, 约定在导航控制器的restorationIdentifier中填入
        let rootViewControllerStroyboardName = restorationIdentifier!
        // Tag 必须要求子控制器是它所在storyboard的initialViewController
        let rootViewController = UIStoryboard(name: rootViewControllerStroyboardName, bundle: nil).instantiateInitialViewController()
        // 如果找到了子控制器, 以下的方法等同于UINavigationController(rootViewController: )方法
        if let rootViewController = rootViewController {
            viewControllers = [rootViewController]
        } else {
            ColorLog.warn("Cannot instantiate rootViewController from storyboard `\(rootViewControllerStroyboardName)`")
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
